package com.yupi.yupicturebackend.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 数据脱敏注解
 * 用于敏感数据的脱敏处理
 * 
 * @author yupi
 */
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Desensitize {

    /**
     * 脱敏类型
     * @return 脱敏类型
     */
    DesensitizeType type();

    /**
     * 自定义脱敏规则（当type为CUSTOM时使用）
     * @return 脱敏规则
     */
    String pattern() default "";

    /**
     * 替换字符
     * @return 替换字符
     */
    String replacement() default "*";

    /**
     * 脱敏类型枚举
     */
    enum DesensitizeType {
        /**
         * 手机号脱敏：138****1234
         */
        PHONE,
        /**
         * 邮箱脱敏：abc***@example.com
         */
        EMAIL,
        /**
         * 身份证脱敏：123456********1234
         */
        ID_CARD,
        /**
         * 银行卡脱敏：1234 **** **** 5678
         */
        BANK_CARD,
        /**
         * 姓名脱敏：张*
         */
        NAME,
        /**
         * 地址脱敏：北京市****区
         */
        ADDRESS,
        /**
         * 自定义脱敏
         */
        CUSTOM
    }
}
